#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>

int main(void){
  printf("有名管道发送端，准备发送数据:\n");
  char *fifo_path="myfifo"; // 有名管道要操作的文件
  // 创建有名管道
  if(mkfifo(fifo_path,0644)!=0){
    perror("mkfifo");
    exit(EXIT_FAILURE);
  }
  // 打开有名管道，进行写入操作
  int fd = open(fifo_path,O_WRONLY); // 只写模式
  if(fd==-1){
    perror("open");
    exit(EXIT_FAILURE);
  }
  char write_buf[100];
  ssize_t read_num;
  // 从控制台获取要写入的数据
  while((read_num=read(STDIN_FILENO,write_buf,100))>0){
    // 将获取到的要发送的数据，通过有名管道发送
    write(fd,write_buf,read_num);
  }
  // ctrl+d结束发送后，操作结束
  printf("发送管道退出，发送进程终止\n");  
  close(fd);
  // 清理有名管道使用的临时文件
  if(unlink(fifo_path)==-1){
    perror("unlink");
    exit(EXIT_FAILURE);
  }
  return 0;
}
